let myPromise = require('./promise')

let p = new myPromise((resolve, reject) => {
  // setTimeout(() => {
  // 抛出一个错误
  // throw new Error('执行器错误')
  // resolve(1)
  // }, 3000)
  // resolve(1)
  // setTimeout(() => {
  //   reject(2)
  // }, 3000)
  reject(2)
  // setTimeout(() => {
  //   resolve('成功。。。。。')
  // }, 3000)
})
// ( new Promise(() => new Error('错误')) ).then().catch((e) => { console.log('error', e.message) }) 
// ( new Promise(() => new Error('错误')) ).catch((e) => { console.log('error', e.message) })
// ok

// p.then(res => {
//   console.log(res)
// }, err => {
//   console.log(err)
// })
// p.then(res => {
//   console.log(res)
// }, err => {
//   console.log(err)
// })

// 链式调用
// p.then(res => {
//   console.log(res)
//   return 100
// }).then(res => {
//   console.log(res)
// })

// function other() {
//   return new myPromise((resolve, reject) => {
//     resolve('other')
//   })
// }
// p.then(res => {
//   console.log(res)
//   return other()
// }).then(res => {
//   console.log(res)
// })


// let p1 = p.then(res => {
//   console.log(res)
//   return p1 // then中避免promise循环调用
// })
// p1.then(res => {
//   console.log(res)
// }, (reason) => {
//   console.log('错误', reason)
// })

// let p1 = p.then(res => {
//   console.log(res)
//   throw new Error('then错误')
// }, (reason) => {
//   console.log('错误', reason)
// })

// p1.then(res => {
//   console.log(res)
// }, (reason) => {
//   console.log('错误', reason)
// })

// p.then(res => {
//   console.log(res)
//   // throw new Error('then错误')
//   return 'aaa'
// }, (reason) => {
//   console.log('错误', reason)
//   return 10000
// }).then(value => {
//   console.log(value)
// })

// p.then(value => value).then(value => value).then(value => {
//   console.log(value)
// })

// p.then().then().then(value => {
//   console.log(value)
// }, reason => console.log(reason))


// 验证并发

// let p1 = new myPromise((resolve, reject) => {
//   setTimeout(() => {
//     resolve('p1')
//   }, 3000)
// })
// let p2 = new myPromise((resolve, reject) => {
//   setTimeout(() => {
//     resolve('p1')
//   }, 1000)
// })

// myPromise.all(['1', '2', p1, p2]).then(res=> {
//   console.log('并发结果', res)
// }, err=> {
//   console.log('并发结果', err)
// })

// myPromise.resolve(100).then(res => console.log(res))
// let p0 = new myPromise((resolve, reject) => {
//   setTimeout(() => {
//     resolve('p')
//   }, 2000)
// })
// myPromise.resolve(p0).then(res => console.log(res))

let p1 = new myPromise((resolve, reject) => {
  setTimeout(() => {
    resolve('p1')
  }, 3000)
})
function p2 () {
  return new myPromise(function (resolve, reject) {
    resolve('p2 resolve')
    // reject('p2 reject')
  })
}
p2().finally(() => { console.log('finally'); return p1(); }).then((value)=> {console.log(value), reason => {console.log(reason)}})
// finally返回promise 后调用失败???

// function p2 () {
//   return new myPromise(function (resolve, reject) {
//     // resolve('p2 resolve')
//     reject('p2 reject')
//   })
// }
// p2().then(res => console.log(res)).catch(reason => {console.log(reason)})
